// compareFn 自定义的比较方法
// 注意： 二分查找arr必须是排序后的数组。
function binarySearch(arr, value, compareFn = defaultCompare) {
  let low = 0;
  let high = arr.length - 1;
  // 求中间值
  while (low <= high) {
    // 找到中间下标
    const mid = Math.floor((low + high) / 2);
    const ele = arr[mid];

    if (compareFn(value, ele) === -1) { // 比中间值小
      high = mid - 1;
    } else if (compareFn(value, ele) === 1) {  // 比中间值大
      low = mid + 1;
    } else { // 相等
      return mid;
    }
    return -1;
  }


}
function defaultCompare(a, b) {
  if (a === b) return 0;
  return a > b ? 1 : -1;
}